package Thread;

//懒汉模式
public class ThreadDemo14 {
    private static class Singleton{
        private Singleton(){//防止再创建实例
        }
        private  static volatile Singleton instance=null;
        private static Singleton getInstance(){
            if(instance==null){//不加这个条件可能会重复获取锁消耗资源可能会很大,第一批线程竞争锁后将不会触发竞争
                synchronized (Singleton.class){//第一批线程竞争这个锁
                    if(instance==null){//读操作
                        //synchronized (Singleton.class){//不能把锁加在这个位置,因为要保证读和写的原子性
                        instance=new Singleton();//涉及到线程安全因为有修改操作(如果实例已经创建完毕则不涉及线程安全)
                    }
                }
            }

            return instance;
        }
    }

    public static void main(String[] args) {
        //使用
        //通过这个方法来获取到实例,就能保证是唯一实例
        Singleton instance= Singleton.getInstance();
    }
}
